/**
 * Representación del contrato de un servicio
 * 
 * @author Alex Muñoz , Mauricio Orellana
 * @version 2012.05.23
 */

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class Contrato
{
    private String nombre;
    private String rut;
    private String direccion;
    private Plan plan;
    private Calendar fechaInicio;
    private Calendar fechaTermino;
    private Empleado supervisor;
    
    /**
     * Constructor de Objetos de la Clase Contrato
     * 
     * @param nombre Nombre del Cliente
     * @param rut Rut del Cliente
     * @param direccion Direccion del Cliente
     * @param plan Plan que contrato el Cliente
     * @param fechaInicio fecha de Inicio del Contrato
     * @param fechaTermino Fecha de termino del contrato
     */
    public Contrato(String nombre, String rut, String direccion, Plan plan, Calendar fechaInicio, Calendar fechaTermino)
    {
        this.nombre = nombre;
        this.rut = rut;
        this.direccion = direccion;
        this.plan = plan;
        this.fechaInicio = fechaInicio;
        this.fechaTermino = fechaTermino;
    }
    
    /**
     * Imprimir datos del Contrato
     */
    public void imprimir()
    {
        System.out.println("Cliente: " + this.nombre +
                "\nRut: " + this.rut +
                "\nDirección: " + this.direccion);
                this.plan.imprimir();
        System.out.println("\nFecha Inicio: " + this.fechaInicio.getTime() +
                "\nFecha Termino: " + this.fechaTermino.getTime());
    }
    
    /**
     * Obtener direccion
     * 
     * @return Cadena que contiene la direccion del cliente 
     */
    public String getDireccion()
    {
        return this.direccion;
    }
    
    /**
     * Modificar Direccion
     * 
     * @param direccion Nueva direccion del cliente
     * 
     */
    public void setDireccion(String direccion)
    {
        this.direccion = direccion;
    }

    /**
     * Obtener fecha de Inicio
     * 
     * @return  Fecha de Inicio del Contrato
     */
    public Date getFechaInicio() 
    {
        return this.fechaInicio.getTime();
    }

    /**
     * Modificar fecha de Inicio
     * 
     * @param fechaInicio Nueva fecha de inicio del Contrato
     */
    public void setFechaInicio(Calendar fechaInicio) 
    {
        this.fechaInicio = fechaInicio;
    }
    
    /**
     * Obtener fecha de Termino del Contrato
     *
     * @return Fecha de termino del contrato
     */
    public Date getFechaTermino() 
    {
        return this.fechaTermino.getTime();
    }
    
    /**
     * Modificar fecha de termino del contrato
     * 
     * @param fechaTermino Fecha de termino del contrato
     */
    public void setFechaTermino(Calendar fechaTermino) 
    {
        this.fechaTermino = fechaTermino;
    }
    
    /**
     * Obtener nombre del Cliente
     * 
     * @return Nombre del Cliente del Contrato
     */
    public String getNombre() {
        return this.nombre;
    }
    
    /**
     * Obtener Nombre del Cliente del Contrato
     * 
     * @param nombre Nombre del Cliente ligado al contrato
     */
    public void setNombre(String nombre)
    {
        this.nombre = nombre;
    }

    /**
     * Obtener Plan
     * 
     * @return Plan establecido en el Contrato
     */
    public Plan getPlan() 
    {
        return this.plan;
    }
    
    /**
     * Modificar Plan
     * 
     * @param plan Nuevo Plan del Contrato
     */
    public void setPlan(Plan plan) 
    {
        this.plan = plan;
    }
    
    /**
     * Obtener Rut del cliente
     * 
     * @return Rut del Cliente ligado al Contrato 
     */
    public String getRut() 
    {
        return this.rut;
    }
    
    /**
     * Modificar rut del cliente
     * 
     * @param rut Nuevo Rut del Cliente
     */
    public void setRut(String rut) 
    {
        this.rut = rut;
    }
    
    /**
     * Obtener Supervisor
     * 
     * @return Empleado que es el supervisor del Contrato
     */
    public Empleado getSupervisor() 
    {
        return this.supervisor;
    }
    
    /**
     * Modificar Supervisor 
     * 
     * @param supervisor 
     */
    public void setSupervisor(Empleado supervisor) 
    {
        this.supervisor = supervisor;
    }  
        
}
